/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logic;

import gui.MainWin;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import javax.swing.JFileChooser;

/**
 *
 * @author Freshman
 */
public class SaveCSV {

    private Varpool vap;
    private MainWin mw;
    private JFileChooser fc;
    private int tabNr = -1;
    private int rowNr = -1;
    private int colNr = -1;
    private String newEntry = "";

    public SaveCSV(Varpool variables, MainWin aThis) {
        this.vap = variables;
        this.mw = aThis;
        savePrepare();
    }

    private void savePrepare() {

        vap.setdTemp(vap.getDataTable());

        /* In einer for-Schleife für alle Tabellen einen Save-Dialog ausgeben
         * und die eigentliche Abspeicherung in jeweils eine Datei vornehmen
        */
        for (tabNr = 0; tabNr < vap.getdTemp().size(); tabNr++) {
            this.fc = new JFileChooser((vap.getDataTable().get(tabNr).getTabName() + ".sql"));
            saveDialog();
            mw.setStatus("Hinweis: Tabellen wurden gespeichert");
        }
    }

    //"Speichern" Dialogfenster mit FileFilter auf "SQL" und Abfrage ob der User die File-Extension ".csv" manuell eingegeben hat.
    private void saveDialog() {
        try {
            fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
            fc.setFileFilter(new FiFi_Csv());
            fc.setAcceptAllFileFilterUsed(false);
            int rc = fc.showDialog(mw, "Speichern");
            if (rc == JFileChooser.APPROVE_OPTION) {
                String path = fc.getSelectedFile().getPath();
                int x = path.lastIndexOf('\\');
                int y = path.lastIndexOf('.');
                if (x > y || y == -1) {
                    path += ".csv";
                    File npath = new File(path);
                    outputListToFile(vap.getDataTable().get(tabNr).toCSV(), npath);
                } else {
                    outputListToFile(vap.getDataTable().get(tabNr).toCSV(), fc.getSelectedFile());
                }
            }
        } catch (Exception ex) {
            ex.getMessage();
            mw.setStatus("Fehler: Speichervorgang wurde unterbrochen: "+ex.getMessage());
        }
    }
    
    private void outputListToFile(List list, File file) {
        try {
            PrintWriter printWriter = new PrintWriter(new FileWriter(file));
            Iterator iter = list.iterator();
            while(iter.hasNext() ) {
                Object o = iter.next();
                printWriter.println(o);
            }
            printWriter.close();
        } catch (IOException e) {
            mw.setStatus("Fehler: Datei konnte nicht angelegt werden."+ e.getMessage());
        }
    }
}
